<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Realiza a interacao entre a aplicacao e a tabela de filmes no banco de dados
 * 
 * @package application/models/adm
 * @name Filme_model
 * @author Joao Claudio Dias Araujo <joao.araujo@tellks.com.br>
 */
class Filme_model extends CI_Model{
    
    private $tabela;
    
    function __construct() {
        parent::__construct();
        
        $this->tabela = 'filme';
    }
            
    /**
     * Busca todos os filmes do banco de dados
     * 
     * @return array
     */
    function get_all(){
        
        $filmes = $this->db->get($this->tabela);
        
        if($filmes->num_rows() > 0){
            
            return $filmes->result();
        }
        else {
            
            return array();
        }
    }
    
    /**
     * Busca os dados de um filme pelo seu ID
     * 
     * @param int $id ID do categoria
     * @return mixed
     */
    function get_by_id($id){
        
        $this->db->select('f.*, p.nome AS nome_pais, fc.categoria_id');
        
        $this->db->from($this->tabela .  ' AS f');
        
        $this->db->join('pais AS p', 'p.id = f.pais', 'LEFT');
        
        $this->db->join('filme_categoria AS fc', 'fc.filme_id = f.id', 'LEFT');
        
        $this->db->where('f.id', $id);
        
        $resultado = $this->db->get();
        
        if($resultado->num_rows() > 0){
            
            $filme = $resultado->row(0);
            
            $filme->categorias = array();
            
            foreach ($resultado->result() as $c){
                
                $filme->categorias[] = $c->categoria_id;
            }
            
            return $filme;
        }
        else{
            
            return false;
        }
        
    }
    
    
    function get_by_nome($nome){
        
        $this->db->select('f.*');
        
        $this->db->from($this->tabela .  ' AS f');
                
        $this->db->like('f.nome', $nome);
        
        $resultado = $this->db->get();
        
        if($resultado->num_rows() > 0){
            
            return $resultado->result_array();
        }
        else{
            
            return false;
        }
        
    }
         
    /**
     * Insere um filme no banco de dados
     * 
     * @param sdtClass Object $filme Objeto contendo os dados do filme
     * @return boolean
     */
    function inserir($filme){
        
        $categorias = $filme->categorias;
        
        unset($filme->categorias);
        
        $this->db->insert($this->tabela, $filme);
        
        $inseriu_filme = (bool)  $this->db->affected_rows();
        
        $id = $this->db->insert_id();
        
        $inseriu_categorias = $this->salvar_categorias($id,$categorias);
        
        return($inseriu_filme && $inseriu_categorias);
    }
    
    /**
     * atualiza um filme no banco de dados
     * 
     * @param sdtClass Object $filme Objeto contendo os dados do filme
     * @return boolean
     */
    function atualizar($filme){
        
        $categorias = $filme->categorias;
        
        unset($filme->categorias);
        
        $this->db->where('id', (int)$filme->id);
        
        $this->db->update($this->tabela,$filme);
        
        $atualizou_filme = (bool)$this->db->affected_rows();
        
        $removeu_categorias = $this->remover_categorias($filme->id);
        
        $inseriu_categorias = $this->salvar_categorias($filme->id, $categorias);
        
        return ($atualizou_filme || ($removeu_categorias || $inseriu_categorias));
    }
    
    /**
     * Remove um filme do banco de dados
     * 
     * @param int $id ID do filme a ser removido
     * @return boolean
     */
    function remover($id){
        
        $this->db->where('id', (int)$id);
        
        $this->db->delete($this->tabela);
        
        return (bool)$this->db->affected_rows();
    }
    
    /**
     * Insere o filme nos categorias recebidos por paramentro
     * 
     * @param int $id ID do filme
     * @param array $categorias Grupos do filme
     * @return boolean
     */
    function salvar_categorias($id, $categorias){
        
        $insert_array = array();
        
        //Itera sob os categorias selecionados no formulario preparando o array para 
        // Insercao em lote
        foreach ($categorias as $g){
            
            $insert_array[] = array(
                'filme_id' => $id,
                'categoria_id'   => $g
            );
        }
        
        // Se ha valores a serem inseridos
        if(sizeof($insert_array) > 0 ){
            
            // Realiza a insercao em lote
            $this->db->insert_batch('filme_categoria', $insert_array);
            
            return (bool)$this->db->affected_rows();
        }
        
        return true;
    }
         
    /**
     * Retira o filme de todos os categorias em que ele esteja inserido
     * @param int $id ID do filme
     * @return boolean
     */
    function remover_categorias($id){
        
        $this->db->where('filme_id',(int)$id);
        
        $this->db->delete('filme_categoria');
        
        return (bool)$this->db->affected_rows();
    }
    

}